home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1833 / 1833.xpi / chrome / yoono.jar / content / yoono / utils.js < prev    next >
Text File  |  2009-12-16  |  10KB  |  319 lines

  1. // max number of similar sites possible to request at a time
  2. const MAXRECOREQUESTS = 50;
  3. // max number of experts possible to request at a time
  4. const MAXEXPERTREQUESTS = 30;
  5. // max number of articles
  6. const MAXARTICLEREQUESTS = 30;
  7.  
  8. const YOONO_CI = Components.interfaces;
  9. const YOONO_CL = Components.classes;
  10.  
  11. const YNPREFBRANCH = YOONO_CL["@mozilla.org/preferences-service;1"].getService(YOONO_CI.nsIPrefService).getBranch("extensions.yoono.");
  12.  
  13. // Yoono services
  14. try {
  15.  
  16. Components.utils.import("resource://yoono/yoonoYEXTIF.js");
  17. Components.utils.import("resource://yoono/yoonoService.js");
  18. Components.utils.import("resource://yoono/yoonoBkmSync.js");
  19. Components.utils.import("resource://yoono/yoonoLog.js");
  20. Components.utils.import("resource://yoono/yoonoDialogs.js");
  21. Components.utils.import("resource://yoono/yoonoUtils.js");
  22. Components.utils.import("resource://yoono/yoonoServerConnection.js");
  23. Components.utils.import("resource://yoono/yoonoPrefs.js");
  24. Components.utils.import("resource://yoono/yoonoSidebarService.js");
  25. Components.utils.import("resource://yoono/yoonoStorage.js");
  26. Components.utils.import("resource://yoono/yoonoKeyValueDB.js");
  27.   
  28. } catch(e) {
  29.   Components.utils.reportError(e);
  30. }
  31. String.prototype.beginsWith = function (substr) {
  32.    return (this.slice(0, substr.length) == substr);
  33. }
  34.  
  35. /*
  36.    renvoie un objet xml repr∩┐╜sentant le noeud <context> pour
  37.    une requete xmlhttprequest envoy∩┐╜e au serveur
  38. */
  39. function scriptContext() {
  40.   var userid = "";
  41.   var syncid = "";
  42.     try {        
  43.         userid = YNPREFBRANCH.getCharPref('userid');
  44.         syncid = YNPREFBRANCH.getCharPref('syncid');
  45.     } catch(e) {
  46.     // nothing to do.
  47.   }
  48.    
  49.    var context = <context>
  50.                      {(userid      ? <user-id> {userid}  </user-id> : '')}
  51.                      {(syncid      ? <sync-id> {syncid} </sync-id> : '')}
  52.                      <version>{YOONO_UTILS.getExtensionVersion()}</version>
  53.                      <client>xpi</client>
  54.                      </context>;
  55.    return context;
  56. }
  57.  
  58. /*
  59. str commence par referenceStr ?
  60. */
  61. function beginWith (str, referenceStr) {
  62.    if (str.slice(0, referenceStr.length) == referenceStr) {
  63.       return true;
  64.    } else {
  65.       return false;
  66.    }  
  67. }
  68.  
  69. function getHostFromUrl(url) {
  70.    var host = url.match( /:\/\/(www\.)?([^\/:]+)/ );
  71.    if (host && host[2]) {
  72.       host = host[2]?host[2]:'';
  73.    } else {
  74.       host = '';
  75.    }
  76.    return host;
  77. }
  78.  
  79. // rend invisible tous les elements <description> 
  80. // qui ont pour class : "warn"
  81. function clearWarnings() {
  82.    var className;
  83.    var listdesc = document.getElementsByTagName("description");
  84.    for (var i = listdesc.length ; i-- > 0 ; ) {
  85.       className = listdesc[i].className;
  86.       if (className == 'warning') {
  87.          listdesc[i].hidden = true;
  88.       }
  89.    }
  90. }
  91.  
  92. // disable all textbox elements
  93. function disableTextBoxes() {
  94.    var listTextBox = document.getElementsByTagName("textbox");
  95.    for (var i = listTextBox.length ; i-- > 0 ; ) {
  96.       listTextBox[i].readonly = true;
  97.    }
  98. }
  99.  
  100. // valide les entrees des formulaires de login
  101. function validateLoginInput(pwd) {
  102.   // read pwd and pwd confirmation getting rid of default value if left untouched by user
  103.   var valid = true;
  104.   if (pwd.length < 6) {
  105.     valid = false;
  106.   }
  107.   if (pwd.length > 20) {
  108.     valid = false;
  109.   }
  110.   loginValidationRegExp = new RegExp(/[^a-zA-Z0-9.\-_]/);
  111.   if (loginValidationRegExp.test(pwd)) {
  112.     valid = false;
  113.   }
  114.  
  115.   return(valid);
  116. }  
  117.  
  118. function isRegisteredUser (id) {
  119.    if (!id) return false;
  120.    if (id.indexOf(':') == -1) {
  121.       return false;
  122.    } else {
  123.       return true;
  124.    }
  125. }
  126.  
  127. function centerWindow () {
  128.    sizeToContent();
  129.    window.screenX = (window.screen.width - window.outerWidth) / 2;
  130.    window.screenY = (window.screen.height - window.outerHeight) / 2;
  131. }
  132.  
  133. var ynRecoTooltip = {
  134.     
  135.     create: function() {
  136.         var tooltip = document.createElement("tooltip");
  137.         return tooltip;
  138.     },
  139.  
  140.     show: function(tooltip, title, rank, url) {
  141.         if (tooltip.getAttribute('alreadyshown'))
  142.             return;
  143.         tooltip.setAttribute('alreadyshown', 'true');
  144.  
  145.         tooltip.setAttribute('class', 'recotooltip');
  146.         tooltip.setAttribute('noautohide', 'true');
  147.  
  148.         
  149.         /* container */
  150.         var maingrid = this.createGrid(2);
  151.  
  152.         // thumbnail
  153.         var thumburi = 'http://open.thumbshots.org/image.pxf?url=' + encodeURIComponent(url);
  154.         var row = document.createElement('row');
  155.         var img = document.createElement('image');
  156.         img.setAttribute('src', thumburi);
  157.         img.setAttribute('onload', "ynRecoTooltip.onLoadThumbnail('" + url + "',this)");
  158.         row.appendChild(img);
  159.  
  160.         /* secondarygrid */
  161.         var secondarygrid = this.createGrid(1);
  162.         // same row element as for <image/>
  163.         row.appendChild(secondarygrid);
  164.         maingrid.childNodes[1].appendChild(row);
  165.  
  166.  
  167.         /* title and favicon */
  168.         row = document.createElement('row');
  169.         row.setAttribute('class', 'bold');
  170.         var box = document.createElement('box');
  171.         row.appendChild(box);
  172.  
  173.         var uri = YOONO_CL['@mozilla.org/docshell/urifixup;1'].
  174.                     getService(YOONO_CI.nsIURIFixup).createFixupURI(url,0);
  175.         var faviconuri = uri.scheme + '://' + uri.asciiHost + '/favicon.ico';
  176.         var img = document.createElement('image');
  177.         img = document.createElement('image');
  178.         img.setAttribute('src', faviconuri);
  179.         img.setAttribute('class', 'tooltipicon');
  180.         box.appendChild(img);
  181.  
  182.         var label = document.createElement('label');
  183.         label.setAttribute('value', sliceText(title, 45));
  184.         box.appendChild(label);
  185.  
  186.         secondarygrid.childNodes[1].appendChild(row);
  187.  
  188.         /* url */
  189.         row = this.rowlabel(sliceText(url, 45));
  190.         row.setAttribute('class', 'recotooltipurllabel');
  191.         secondarygrid.childNodes[1].appendChild(row);
  192.  
  193.         /* rank */
  194.         row = this.rowlabel(yoonoGlob.gStrbundle.getString('autosuggest.rank') + rank);
  195.         secondarygrid.childNodes[1].appendChild(row);
  196.  
  197.         /* notice : mp pr∩┐╜sent dans les mps */
  198.         if (tooltip.getAttribute("knownurl")) {
  199.  
  200.             var row = document.createElement('row');
  201.             row.setAttribute('class', 'knownurlnotice');
  202.  
  203.             var box = document.createElement('box');
  204.             
  205.             img = document.createElement("image");
  206.             img.setAttribute("src", "chrome://yoono/skin/knownurl-coche.png");
  207.             img.setAttribute("class", "tooltipicon");
  208.             box.appendChild(img);
  209.  
  210.             var label = document.createElement("label");
  211.             label.setAttribute("value", yoonoGlob.gStrbundle.getString("knownurl.notice"));
  212.             box.appendChild(label);
  213.  
  214.             row.appendChild(box);
  215.  
  216.             secondarygrid.childNodes[1].appendChild(row);
  217.         } 
  218.  
  219.         /* thumbshots.com notice */
  220.         row = this.rowlabel('http://www.thumbshots.com');
  221.         // will be displayed only if thumbnail exists
  222.         row.setAttribute('class', 'nodisplay');
  223.         secondarygrid.childNodes[1].appendChild(row);
  224.  
  225.         tooltip.appendChild(maingrid);
  226.         return;
  227.  
  228.     },
  229.  
  230.     onLoadThumbnail: function(url,image) {
  231.         if (image.loaded) return;
  232.         var width = document.defaultView.getComputedStyle(image, null).getPropertyValue("width");
  233.         if (width != '1px' && width != '2px') {
  234.             // thumbnail exists
  235.             image.setAttribute('class', 'imgthumbshot');
  236.             
  237.             var notice = image.nextSibling.childNodes[1].lastChild;
  238.             notice.setAttribute('class', 'thumbshotnotice');
  239.             image.loaded = true;
  240.         } else {
  241.             var uri = YOONO_CL['@mozilla.org/docshell/urifixup;1'].
  242.                         getService(YOONO_CI.nsIURIFixup).createFixupURI(url,0);
  243.             var hosturl = uri.scheme + '://' + uri.host;
  244.             if (hosturl == url) {
  245.                 image.loaded = true;
  246.             } else {
  247.                 var thumburi = 'http://open.thumbshots.org/image.pxf?url=' + encodeURIComponent(hosturl); 
  248.                 image.setAttribute('src', thumburi);
  249.                 image.setAttribute('onload', "ynRecoTooltip.onLoadThumbnail('" + hosturl + "',this)");
  250.             }
  251.  
  252.         }
  253.     },
  254.  
  255.  
  256.     rowlabel: function(text) {
  257.         var row = document.createElement('row');
  258.         var label = document.createElement('label');
  259.         label.setAttribute('value', text);
  260.         row.appendChild(label);
  261.         return row;
  262.     },
  263.  
  264.     createGrid: function(nbcols) {
  265.         var grid = document.createElement('grid');
  266.         var columns = document.createElement('columns');
  267.         var rows = document.createElement('rows');
  268.         for (var i = 0 ; i < nbcols; i++) {
  269.             var column = document.createElement('column');
  270.             columns.appendChild(column);
  271.         }
  272.  
  273.         grid.appendChild(columns);
  274.         grid.appendChild(rows);
  275.  
  276.         return grid;
  277.     }
  278.  
  279. }
  280.  
  281.  
  282. function ynAllBrowserWindow () {
  283.     var WMED = YOONO_CL['@mozilla.org/appshell/window-mediator;1'].getService(YOONO_CI.nsIWindowMediator);
  284.     return WMED.getEnumerator("navigator:browser");
  285. }
  286.  
  287.  
  288.  
  289. function getCurrentPageHref() {
  290.    return getBrowser().contentDocument.location.href; 
  291. }
  292.  
  293. function sliceText(aText, aMaxChar) {
  294.     return (aText.length > aMaxChar) ? aText.slice(0,aMaxChar) + ' \u2026' : aText;
  295. }
  296.  
  297. var hasSomeItems = function(obj) {
  298.     for (var i in obj) {
  299.         return true;
  300.     }
  301.     return false;
  302. }
  303.  
  304. /* outils de d∩┐╜buggage */
  305.  
  306. const YOONO_CONSOLESERVICE = YOONO_CL["@mozilla.org/consoleservice;1"].getService(YOONO_CI.nsIConsoleService);
  307. var log = function(message) { 
  308.    YOONO_CONSOLESERVICE.logStringMessage("Yoono : " + message );
  309.    if('stack' in message)
  310.        YOONO_CONSOLESERVICE.logStringMessage("Yoono : " + message.stack );
  311. }
  312.  
  313. var Assert = function (condition) {
  314.     if (!condition) {
  315.         throw ("assert detected in : " + Assert.caller);
  316.         
  317.     }
  318. }
  319.